﻿using System;

namespace Algorithm.LeetCode
{
    /// <summary>
    /// 第六十六题：加一
    /// </summary>
    public class No66
    {
        /*
         * 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
         * 
         * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
         * 
         * 你可以假设除了整数 0 之外，这个整数不会以零开头。
         */

        public static int[] PlusOne(int[] digits)
        {
            for (int i = digits.Length - 1; i >= 0; i--)
            {
                digits[i] = digits[i] + 1;
                if (digits[i] != 10)
                {
                    break;
                }
                else
                {
                    digits[i] = 0;
                }
            }
            if (digits[0] == 0)
            {
                Array.Resize(ref digits, digits.Length + 1);
                digits[0] = 1;
            }
            return digits;
        }

        // public static int[] PlusOne(int[] digits)
        // {
        //     long sum = 0;
        //     for (int i = 0; i < digits.Length; i++)
        //     {
        //         sum = sum * 10 + digits[i];
        //     }
        //     ++sum;
        //     var list = new List<int>();
        //     while (sum > 0)
        //     {
        //         list.Add((int)(sum % 10));
        //         sum = sum / 10;
        //     }
        //     list.Reverse();
        //     return list.ToArray();
        // }
    }
}
